<?php

 /**
  * ---------------------------------------------------------------
  * ASIGNATURA CONTROLADOR
  * ---------------------------------------------------------------
  * Esta es la clase Controlador asignatura, contiene la invocación a todas las vistas 
  * para realizar las funciones ligadas a asignatura
  */
 class Asignatura extends CI_Controller {



     /**
      * ---------------------------------------------------------------
      * CONSTRUCTOR
      * ---------------------------------------------------------------
      * Este es el constructor, el cual incluye la libreria url que es indispensable 
      * :]
      */
     public function __construct() {
         parent::__construct();
         $this->load->helper("url");
         $this->load->library("session");

         if (!$this->get_log())
             redirect(site_url("jefatura"));

     }




     /**
      * ---------------------------------------------------------------
      * PANTALLA
      * ---------------------------------------------------------------
      * Index pantalla...
      * @author Sergio Morlán Páramo
      */
     public function index($id= FALSE) {
         redirect(site_url("jefatura"));

     }




     public function a($id= FALSE) {
         $this->load->library("api/asignatura_class");
         $this->load->library("utils/fecha");

         $asignatura = new Asignatura_class($id);

         if (!$asignatura->id())
             redirect(site_url("asignatura/cat"));


         $data = array(
                   "titulo" => "Asignatura " . $asignatura->nombre(),
                   "fecha" => $this->fecha->getFecha(),
                   "asignatura" => $asignatura,
                   "menu" => "menu_jefatura",
                   "contenido" => "jefatura/asignatura/asignatura"
         );
         $this->load->view("plantilla/plantilla_unam", $data);

     }




     public function multiple() {
         if (!$this->peticion_ajax())
             redirect(site_url("asignatura/cat" . $this->get_parameters()));

         if (!isset($_POST["asignatura"]) || $_POST["accion"] == "0")
             return FALSE;
         else
             $array = $_POST["asignatura"];

         $this->load->library("api/asignatura_class");
         $asignatura = NULL;

         foreach ($array as $key => $value) {
              $asignatura[] = new Asignatura_class($value, array("nombre"));
         }

         // Eliminar
         if ($_POST["accion"] == "1") {
             $data = array(
                       "titulo" => "Eliminar " . count($asignatura),
                       "asignatura" => $asignatura,
                       "ajax" => $this->peticion_ajax()
             );
             $this->load->view("jefatura/asignatura/asignatura_eliminar", $data);
         }

     }




     /**
      * ---------------------------------------------------------------
      * PRIVATE
      * ---------------------------------------------------------------
      * Verifica si la petición se esta realizando mediante ajax retornando
      * @return bolean
      */
     private function peticion_ajax() {
         if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == "XMLHttpRequest") {
             unset($_SERVER['HTTP_X_REQUESTED_WITH']);
             return TRUE;
         } else {
             return FALSE;
         }

     }




     /**
      * ---------------------------------------------------------------
      * PANTALLA/INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Formulario de registro y validaciones ... 
      * Muestra el formularion necesario para realizar el registro de asignatura :]
      * @author Sergio Morlán Páramo
      */
     public function agregar() {
         $this->load->helper("form");
         $this->load->library("form_validation");
         $this->load->library("utils/fecha");
         $form_valido = FALSE;


         // Si es que se realiza un envío (presionar submit)
         if ($_POST)
             $form_valido = $this->validaciones();

         // Si ocurrio algun error de validación regresamos al formulario
         if (!$form_valido) {
             $data = array(
                       "titulo" => "Nueva asignatura",
                       "fecha" => $this->fecha->getFecha(),
                       "menu" => "menu_jefatura",
                       "contenido" => "jefatura/asignatura/asignatura_agregar"
             );
             $this->load->view("plantilla/plantilla_unam", $data);
         } else {
             $this->intentar_agregar();
         }

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Validación de formulario ...
      * Vamos a realizar las validaciones necesarias del lado del servidor, la información
      * sobre estos metodos se encuentra en la documentación de codeigniter
      * @access private
      * @return boolean 
      * @author Sergio Morlán Páramo
      */
     private function validaciones() {

         // Validaciones generales
         $this->form_validation->set_rules("asignatura_clave", "Clave de Asignatura", "required|max_length[10]|trim|xss_clean");
         $this->form_validation->set_rules("asignatura_nombre", "Nombre de Asignatura", "required|max_length[90]|trim|xss_clean");
         $this->form_validation->set_rules("asignatura_descripcion", "Descripción", "required|max_length[255]|trim|xss_clean");
         $this->form_validation->set_rules("asignatura_area", "Área de Asignatura", "required|max_length[90]|trim|xss_clean");
         $this->form_validation->set_rules("asignatura_duracion", "Duración", "required|numeric|max_length[5]|trim|xss_clean");

         // Formato de wrapper para los mensajes de error
         $this->form_validation->set_error_delimiters("<div class='error_form_validation'>", "</div>");

         // Personalización de mensajes
         $this->form_validation->set_message("required", "Debe introducir el campo %s");
         $this->form_validation->set_message("alpha", "El campo %s no admite caracteres numericos");
         $this->form_validation->set_message("min_length", "El campo %s debe ser de por lo menos %s caracteres");
         $this->form_validation->set_message("max_length", "El campo %s no debe tener más de %s caracteres");
         $this->form_validation->set_message("exact_length", "El campo %s debe tener exactamente %s caracteres");
         $this->form_validation->set_message("valid_email", "Debe escribir un formato de correo v&aacute;lido");
         $this->form_validation->set_message("numeric", "Debe introducir solo numeros en el campo %s");
         $this->form_validation->set_message("integer", "Debe introducir solo numeros en el campo %s");
         $this->form_validation->set_message("matches", "Los emails no son iguales");

         // Retorno el resultado de la validación
         return $this->form_validation->run();

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Vamos a intentar registrar asignatura, tendremos que hacer ciertas validaciones en 
      * Si todos los formatos son correctos se enviara para registrar mediante la API
      * @access private
      * @author Sergio Morlán Páramo
      */
     private function intentar_agregar() {
         // Si no existe ningún envio por POST redireccionamos
         if (!$_POST)
             redirect(site_url("asignatura/agregar"));

         // Carga de la api
         $this->load->library("api/asignatura_class");
         $asignatura = new Asignatura_class();


         // Asignar Siguiente Id
         $asignatura->setid($asignatura->nextID());
         // Recibir y asignar atributos 
         $this->asignar_atributos($asignatura);


         // Se intenta registrar
         if ($asignatura->xnew()) {
             redirect(site_url("asignatura/cat" . "#lst_asignatura_" . $asignatura->id()));
         } else {
             // En caso de un error OJO muestra mensaje error de MySQL
             show_error($asignatura->q_errormysqlstr(), 500, $asignatura->q_errormsqlcode());
         }

     }




     /**
      * ---------------------------------------------------------------
      * PRIVATE
      * ---------------------------------------------------------------
      * Vamos a verificar que el usuario realmente haya iniciado sesión ;]
      * @access private
      * @return boolean 
      * @author Sergio Morlán Páramo
      */
     private function get_log() {
         if ($this->session->userdata("J_SESION"))
             return TRUE;

     }




     /**
      * ---------------------------------------------------------------
      * PRIVATE (BUSINESS)
      * ---------------------------------------------------------------
      * Vamos a asignar todos excepto matricula (PK) los atributos del objeto asignatura
      * @access private
      * @author Sergio Morlán Páramo
      */
     private function asignar_atributos($asignatura) {
         $asignatura->setclave(mysql_real_escape_string($_POST["asignatura_clave"]));
         $asignatura->setnombre(mysql_real_escape_string($_POST["asignatura_nombre"]));
         $asignatura->setdescripcion(mysql_real_escape_string($_POST["asignatura_descripcion"]));
         $asignatura->setarea(mysql_real_escape_string($_POST["asignatura_area"]));
         $asignatura->setduracion(mysql_real_escape_string($_POST["asignatura_duracion"]));

     }




     /**
      * ---------------------------------------------------------------
      * PANTALLA
      * ---------------------------------------------------------------
      * Vamos a visualizar todos los registros de Asignatura
      * @author Sergio Morlán Páramo 
      */
     public function cat() {
         // Carga de la api
         $this->load->library("api/asignatura_class");
         $this->load->library("utils/fecha");

         // Control de vistas
         if (isset($_GET["v"])) {
             if ($_GET["v"] == 1)
                 $contenido = "asignatura_catalogo";
             else if ($_GET["v"] == 2)
                 $contenido = "asignatura_tabla";
             else
                 $contenido = "asignatura_tabla";
         }
         else
             $contenido = "asignatura_tabla";


         // Obtenemos todas las $table
         $asignatura = $this->asignatura_class->xgets(FALSE, FALSE, "id");

         $data = array(
                   "titulo" => "Catalogo de asignatura",
                   "fecha" => $this->fecha->getFecha(),
                   "menu" => "menu_jefatura",
                   "asignatura" => (!$asignatura)?NULL:$asignatura,
                   "contenido" => "jefatura/asignatura/" . $contenido
         );
         $this->load->view("plantilla/plantilla_unam", $data);

     }




     public function get_parameters() {
         if (isset($_GET["v"])) {
             if ($_GET["v"] == 1)
                 $parameter = "?v=" . $_GET["v"];
             else if ($_GET["v"] == 2)
                 $parameter = "?v=" . $_GET["v"];
             else
                 $parameter = "";
         }
         else
             $parameter = "";
         return $parameter;

     }




     /**
      * ---------------------------------------------------------------
      * PANTALLA
      * --------------------------------------------------------------- 
      * Vamos a mostrar pantalla de aviso para eliminar asignatura
      * @author Sergio Morlán Páramo
      */
     public function del($id=FALSE) {
         $this->load->library("api/asignatura_class");

         if ($id != "multiple") {
             $asignatura = new Asignatura_class($id, array("clave", "nombre"));

             if (!$asignatura->id())
                 redirect(site_url("asignatura/cat"));
             // Si no existe ningún envio por POST redireccionamos

             if (!isset($_POST["asignatura_id"])) {
                 $data = array(
                           "titulo" => "Eliminar " . $asignatura->nombre(),
                           "asignatura" => $asignatura,
                 );
                 $this->load->view("jefatura/asignatura/asignatura_eliminar", $data);
             } else {
                 if ($this->intentar_eliminar())
                     redirect(site_url("asignatura/cat"));
                 else
                     redirect(site_url("asignatura/cat"));
             }
         }else {

             if (isset($_POST["asignatura_id"]))
                 $asignatura = $_POST["asignatura_id"];
             else
                 redirect(site_url("asignatura/cat") . $this->get_parameters());
             foreach ($asignatura as $key => $value) {
                 $this->asignatura_class->xdel($value);
             }
             redirect(site_url("asignatura/cat") . $this->get_parameters());
         }

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Vamos a intentar eliminar asignatura, tendremos que hacer ciertas 
      * mediante la API
      * @access private
      * @author Sergio Morlán Páramo
      */
     private function intentar_eliminar($id=FALSE) {
         if (!$id)
             $id = $_POST["asignatura_id"];
         if (!$_POST)
             redirect(site_url("asignatura/cat"));
         $this->load->library("api/asignatura_class");
         return $this->asignatura_class->xdel($id);

     }




     /**
      * ---------------------------------------------------------------
      * PANTALLA
      * --------------------------------------------------------------- 
      * Vamos a editar una asignatura registrada 
      * @param int $id Id de la asignatura a editar
      * @author Sergio Morlán Páramo
      */
     public function edt($id=FALSE) {

         $this->load->library("api/asignatura_class");
         $this->load->library("utils/fecha");
         $this->load->helper("form");
         $this->load->library("form_validation");
         $form_valido = FALSE;


         $asignatura = new Asignatura_class($id);
         if (!$asignatura->id() && !$_POST)
             redirect(site_url("asignatura/cat"));


         // Si es que se realiza un envío (presionar submit)
         if ($_POST)
             $form_valido = $this->validaciones();


         // Si ocurrio algun error de validación regresamos al formulario
         if (!$form_valido) {
             $data = array(
                       "titulo" => "Editando asignatura " . $asignatura->id(),
                       "fecha" => $this->fecha->getFecha(),
                       "menu" => "menu_jefatura",
                       "asignatura" => $asignatura,
                       "contenido" => "jefatura/asignatura/asignatura_editar"
             );
             $this->load->view("plantilla/plantilla_unam", $data);
         } else {
             $this->intentar_editar();
         }

     }




     /**
      * ---------------------------------------------------------------
      * INTERCAMBIO (BUSINESS)
      * ---------------------------------------------------------------
      * Vamos a intentar guardar cambios de asignatura, tendremos que hacer ciertas 
      * validaciones en Si todos los formatos son correctos se enviara para registrar 
      * mediante la API
      * @access private
      * @author Sergio Morlán Páramo
      */
     private function intentar_editar() {
         // Si no existe ningún envio por POST redireccionamos
         if (!$_POST)
             redirect(site_url("asignatura/cat"));

         // Carga de la api
         $this->load->library("api/asignatura_class");
         $asignatura = new Asignatura_class($_POST["asignatura_id"]);
         // Recibir y asignar atributos 
         $this->asignar_atributos($asignatura);

         // Se intenta registrar
         if ($asignatura->xchange()) {
             redirect(site_url("asignatura/cat" . "#lst_asignatura_" . $asignatura->id()));
         } else {
             // En caso de un error OJO muestra mensaje error de MySQL
             show_error($asignatura->q_errormysqlstr(), 500, $asignatura->q_errormsqlcode());
         }

     }




     public function prueba() {
         $array = $_POST["asignatura"];
         $str = NULL;
         foreach ($array as $key => $value) {
             $str .= $value;
         };

         echo $str;

     }




 }

 